package com.birdboot.core;

import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;

/**
 * 该线程的任务是与指定的客户端完成HTTP交互
 */
public class ClientHandler implements Runnable{
    private Socket socket;
    public ClientHandler(Socket socket){
        this.socket = socket;
    }

    public void run() {
        try {
            /*
                测试读取来自浏览器发送过来的请求内容
                我们日常上网会知道,有时候我们会给服务器上传附件,因此从这一点可以推断出浏览器
                发送给服务器的请求内容不全是文字,会有2进制的文件数据内容.
                对此,我们这里不考虑将Socket获取的输入流连接为缓冲字符流了,否则会将浏览器发送
                过来的所有内容当成文字处理

                HTTP协议要求浏览器发送的请求除了附件部分,都是文字,而且文字只有英文,数字,符号
                这些字符都是ASC编码对应的内容,特点都是一个字节就可以表示一个字符了.

                在我们没有上传附件这类操作前,我们可以临时测试从输入流中读取浏览器发送过来的请求
                所有内容(只有文字部分了),每读取一个字节就转换为一个字符,然后将它们输出,观察
                浏览器发送过来的请求内容.



                浏览器测试路径:
                http://localhost:8088/index.html

                http://localhost:8088/myweb/index.html

                如果服务器打桩输出时内容为乱码,检查浏览器上述地址是否没写:http://
                这个一定补上,否则浏览器可能使用了https协议,这是加密的http协议导致服务端
                读取的内容时乱码
             */
            InputStream in = socket.getInputStream();
            int d;//用来接收读取的每一个字节
            while((d = in.read())!=-1){
                char c = (char)d;
                System.out.print(c);
            }



        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}
